/* TODO: replicate diagonal swallow slots to the other hover styles */
group { name: "elm/hover/base/default";
   data.item: "dismiss" "on";
   script {
      public on_dismiss = 0;
   }
   parts {
      part { name: "elm.swallow.offset"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 0.0 0.0;
            fixed: 1 1;
            rel1.relative: 0.0 0.0;
            rel2.relative: 0.0 0.0;
         }
      }
      part { name: "elm.swallow.size"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 0.0 0.0;
            fixed: 1 1;
            rel1.to: "elm.swallow.offset";
            rel1.relative: 1.0 1.0;
            rel2.to: "elm.swallow.offset";
            rel2.relative: 1.0 1.0;
         }
      }
      part { name: "base"; type: RECT; mouse_events: 1;
         description { state: "default" 0.0;
            color_class: "/dim/normal/hover";
         }
      }
      part { name: "box"; type: RECT; mouse_events: 0;
         description { state: "default" 0.0;
            color: 0 0 0 0; // no cc
            rel1.to: "elm.swallow.size";
            rel1.offset: -2 -2;
            rel2.to: "elm.swallow.size";
            rel2.offset: 1 1;
         }
      }
      part { name: "elm.swallow.slot.left"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 1.0 0.5;
            fixed: 1 0;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 0.0 0.0;
            rel1.offset: -1 0;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 0.0 1.0;
            rel2.offset: -1 -1;
         }
      }
      part { name: "elm.swallow.slot.top-left"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 1.0 1.0;
            fixed: 1 1;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 0.0 0.0;
            rel1.offset: 0 0;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 0.0 0.0;
            rel2.offset: -1 -1;
         }
      }
      part { name: "elm.swallow.slot.top"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 0.5 1.0;
            fixed: 0 1;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 0.0 0.0;
            rel1.offset: 0 -1;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 1.0 0.0;
            rel2.offset: -1 -1;
         }
      }
      part { name: "elm.swallow.slot.top-right"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 0.0 1.0;
            fixed: 1 1;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 1.0 0.0;
            rel1.offset: 0 0;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 1.0 0.0;
            rel2.offset: -1 -1;
         }
      }
      part { name: "elm.swallow.slot.right"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 0.0 0.5;
            fixed: 1 0;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 1.0 0.0;
            rel1.offset: 0 0;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 1.0 1.0;
            rel2.offset: 0 -1;
         }
      }
      part { name: "elm.swallow.slot.bottom-right"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 0.0 0.0;
            fixed: 1 1;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 1.0 1.0;
            rel1.offset: 0 0;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 1.0 1.0;
            rel2.offset: -1 -1;
         }
      }
      part { name: "elm.swallow.slot.bottom"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 0.5 0.0;
            fixed: 0 1;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 0.0 1.0;
            rel1.offset: 0 0;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 1.0 1.0;
            rel2.offset: -1 0;
         }
      }
      part { name: "elm.swallow.slot.bottom-left"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 1.0 0.0;
            fixed: 1 1;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 0.0 1.0;
            rel1.offset: 0 0;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 0.0 1.0;
            rel2.offset: -1 0;
         }
      }
      part { name: "elm.swallow.slot.middle"; type: SWALLOW;
         description { state: "default" 0.0;
            rel.to: "elm.swallow.size";
         }
      }
   }
   programs {
      program { name: "end";
         signal: "mouse,up,*"; source: "base";
         script {
            if (get_int(on_dismiss) == 0) {
               emit("elm,action,dismiss", "elm");
               set_int(on_dismiss, 1);
            }
         }
      }
      program { name: "hide";
         signal: "elm,action,hide"; source: "elm";
         after: "hidefinished";
      }
      program { name: "hidefinished";
         script {
            set_int(on_dismiss, 0);
            emit("elm,action,hide,finished", "elm");
         }
      }
   }
}

group { name: "elm/hover/base/popout";
   data.item: "dismiss" "on";
   images.image: "shad_angle_l.png" COMP;
   images.image: "shad_angle_r.png" COMP;
   images.image: "shad_angle_t.png" COMP;
   images.image: "shad_angle_b.png" COMP;
   script {
      public on_dismiss = 0;
   }
   parts {
      part { name: "elm.swallow.offset"; type: SWALLOW;
         description { state: "default" 0.0;
            fixed: 1 1;
            align: 0.0 0.0;
            rel2.relative: 0.0 0.0;
         }
      }
      part { name: "elm.swallow.size"; type: SWALLOW;
         description { state: "default" 0.0;
            fixed: 1 1;
            align: 0.0 0.0;
            rel.to: "elm.swallow.offset";
            rel1.relative: 1.0 1.0;
         }
      }
      part { name: "base"; type: RECT;
         description { state: "default" 0.0;
            color: 255 255 255 0; // no cc
            color_class: "/dim/normal/hover";
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            color: 255 255 255 255; // no cc
         }
      }
      part { name: "leftclip"; type: RECT;
         description { state: "default" 0.0;
            rel2.to_x: "pop";
            rel2.relative: 0.0 1.0;
            rel2.offset: 1 -1;
         }
      }
      part { name: "shad_left"; nomouse;
         scale: 1;
         clip_to: "leftclip";
         description { state: "default" 0.0;
            visible: 0;
            rel.to: "left";
            WIN_SHADOW_ANGLE_SMALL("shad_angle_l.png");
            color_class: "/shadow/normal/hover";
            color: 255 255 255 0; // no cc
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            visible: 1;
            color: 255 255 255 255; // no cc
         }
      }
      part { name: "shad_right"; nomouse;
         scale: 1;
         clip_to: "rightclip";
         description { state: "default" 0.0;
            visible: 0;
            rel.to: "right";
            WIN_SHADOW_ANGLE_SMALL("shad_angle_r.png");
            color_class: "/shadow/normal/hover";
            color: 255 255 255 0; // no cc
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            visible: 1;
            color: 255 255 255 255; // no cc
         }
      }
      part { name: "shad_top"; nomouse;
         scale: 1;
         clip_to: "topclip";
         description { state: "default" 0.0;
            visible: 0;
            rel.to: "top";
            WIN_SHADOW_ANGLE_SMALL("shad_angle_t.png");
            color_class: "/shadow/normal/hover";
            color: 255 255 255 0; // no cc
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            visible: 1;
            color: 255 255 255 255; // no cc
         }
      }
      part { name: "shad_bottom"; nomouse;
         scale: 1;
         clip_to: "bottomclip";
         description { state: "default" 0.0;
            visible: 0;
            rel.to: "bottom";
            WIN_SHADOW_ANGLE_SMALL("shad_angle_b.png");
            color_class: "/shadow/normal/hover";
            color: 255 255 255 0; // no cc
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            visible: 1;
            color: 255 255 255 255; // no cc
         }
      }
      part { name: "left"; type: RECT;
         clip_to: "leftclip";
         description { state: "default" 0.0;
            visible: 0;
            rel.to: "elm.swallow.slot.left";
            rel1.offset: -6 -6;
            rel2.offset: -1 5;
            color_class: "/bg/normal/hover";
            color: 255 255 255 0; // no cc
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            visible: 1;
            color: 255 255 255 255; // no cc
         }
      }
      part { name: "elm.swallow.slot.left"; type: SWALLOW;
         clip_to: "leftclip";
         description { state: "default" 0.0;
            fixed: 1 0;
            align: 0.0 0.5;
            rel.to: "elm.swallow.slot.middle";
            rel1.offset: -1 0;
            rel2.relative: 0.0 1.0;
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            rel1.offset: -7 0;
            rel2.offset: -7 -1;
            align: 1.0 0.5;
         }
      }
      part { name: "rightclip"; type: RECT;
         description { state: "default" 0.0;
            rel1.to_x: "pop";
            rel1.relative: 1.0 0.0;
            rel1.offset: -2 0;
         }
      }
      part { name: "right"; type: RECT;
         clip_to: "rightclip";
         description { state: "default" 0.0;
            visible: 0;
            rel.to: "elm.swallow.slot.right";
            rel1.offset: 0 -6;
            rel2.offset: 5 5;
            color_class: "/bg/normal/hover/base";
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            visible: 1;
         }
      }
      part { name: "elm.swallow.slot.right"; type: SWALLOW;
         clip_to: "rightclip";
         description { state: "default" 0.0;
            fixed: 1 0;
            align: 1.0 0.5;
            rel.to: "elm.swallow.slot.middle";
            rel1.relative: 1.0 0.0;
            rel2.offset: 0 -1;
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            rel1.offset: 6 0;
            rel2.offset: 6 -1;
            align: 0.0 0.5;
         }
      }
      part { name: "topclip"; type: RECT;
         description { state: "default" 0.0;
            rel2.to_y: "pop";
            rel2.relative: 1.0 0.0;
            rel2.offset: -1 1;
         }
      }
      part { name: "top"; type: RECT;
         clip_to: "topclip";
         description { state: "default" 0.0;
            visible: 0;
            rel.to: "elm.swallow.slot.top";
            rel1.offset: -6 -6;
            rel2.offset: 5 -1;
            color_class: "/bg/normal/hover/base";
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            visible: 1;
         }
      }
      part { name: "elm.swallow.slot.top"; type: SWALLOW;
         clip_to: "topclip";
         description { state: "default" 0.0;
            fixed: 0 1;
            align: 0.5 0.0;
            rel.to: "elm.swallow.slot.middle";
            rel1.offset: 0 -1;
            rel2.relative: 1.0 0.0;
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            rel1.offset: 0 -7;
            rel2.offset: -1 -7;
            align: 0.5 1.0;
         }
      }
      part { name: "bottomclip"; type: RECT;
         description { state: "default" 0.0;
            rel1.to_y: "pop";
            rel1.relative: 0.0 1.0;
            rel1.offset: -1 -2;
         }
      }
      part { name: "bottom"; type: RECT;
         clip_to: "bottomclip";
         description { state: "default" 0.0;
            visible: 0;
            rel.to: "elm.swallow.slot.bottom";
            rel1.offset: -6 0;
            rel2.offset: 5 5;
            color_class: "/bg/normal/hover/base";
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            visible: 1;
         }
      }
      part { name: "elm.swallow.slot.bottom"; type: SWALLOW;
         clip_to: "bottomclip";
         description { state: "default" 0.0;
            fixed: 0 1;
            align: 0.5 1.0;
            rel.to: "elm.swallow.slot.middle";
            rel1.relative: 0.0 1.0;
            rel2.offset: -1 0;
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            rel1.offset: 0 6;
            rel2.offset: -1 6;
            align: 0.5 0.0;
         }
      }
      part { name: "pop"; type: RECT;
         description { state: "default" 0.0;
            rel.to: "elm.swallow.slot.middle";
            rel1.offset: -6 -6;
            rel2.offset: 5 5;
            color_class: "/bg/normal/hover/base";
         }
      }
      part { name: "elm.swallow.slot.middle"; type: SWALLOW;
         description { state: "default" 0.0;
            rel.to: "elm.swallow.size";
         }
      }
   }
   programs {
      program { name: "end";
         signal: "mouse,up,*"; source: "base";
         script {
            if (get_int(on_dismiss) == 0) {
               emit("elm,action,dismiss", "elm");
               set_int(on_dismiss, 1);
            }
         }
      }
      program { name: "show";
         signal: "elm,action,show"; source: "elm";
         action: STATE_SET "visible" 0.0;
         target: "base";
      }
      program { name: "hide";
         signal: "elm,action,hide"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.5;
         target: "base";
         after: "hidefinished";
      }
      program { name: "hidefinished";
         script {
            set_int(on_dismiss, 0);
            emit("elm,action,hide,finished", "elm");
         }
      }
      program { name: "leftshow";
         signal: "elm,action,slot,left,show"; source: "elm";
         action: STATE_SET "visible" 0.0;
         transition: DECELERATE 0.2;
         target: "left";
         target: "shad_left";
         target: "elm.swallow.slot.left";
      }
      program { name: "lefthide";
         signal: "elm,action,slot,left,hide"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.2;
         target: "left";
         target: "shad_left";
         target: "elm.swallow.slot.left";
      }
      program { name: "rightshow";
         signal: "elm,action,slot,right,show"; source: "elm";
         action: STATE_SET "visible" 0.0;
         transition: DECELERATE 0.2;
         target: "right";
         target: "shad_right";
         target: "elm.swallow.slot.right";
      }
      program { name: "righthide";
         signal: "elm,action,slot,right,hide"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.2;
         target: "right";
         target: "shad_right";
         target: "elm.swallow.slot.right";
      }
      program { name: "topshow";
         signal: "elm,action,slot,top,show"; source: "elm";
         action: STATE_SET "visible" 0.0;
         transition: DECELERATE 0.2;
         target: "top";
         target: "shad_top";
         target: "elm.swallow.slot.top";
      }
      program { name: "tophide";
         signal: "elm,action,slot,top,hide"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.2;
         target: "top";
         target: "shad_top";
         target: "elm.swallow.slot.top";
      }
      program { name: "bottomshow";
         signal: "elm,action,slot,bottom,show"; source: "elm";
         action: STATE_SET "visible" 0.0;
         transition: DECELERATE 0.2;
         target: "bottom";
         target: "shad_bottom";
         target: "elm.swallow.slot.bottom";
      }
      program { name: "bottomhide";
         signal: "elm,action,slot,bottom,hide"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.2;
         target: "bottom";
         target: "shad_bottom";
         target: "elm.swallow.slot.bottom";
      }
   }
}

group { name: "elm/hover/base/hoversel_vertical/default";
   alias: "elm/hover/base/hoversel_vertical/entry";
   alias: "elm/hover/base/combobox_vertical/entry";
   alias: "elm/hover/base/combobox_vertical/default";
   images.image: "shad_angle_t.png" COMP;
   images.image: "shad_angle_b.png" COMP;
   data.item: "dismiss" "on";
   // max_size limits the maximum size of expanded hoversel
   // when it's scrollable.
   //data.item: "max_size" "60";
   script {
      public visible = 0;
      public right = 0;
      public on_dismiss = 0;
      public topshow2() {
         if (get_int(right) == 0)
            run_program(PROGRAM:"topshow_default");
         else
            run_program(PROGRAM:"topshow_right");
         set_int(visible, 1);
         set_int(on_dismiss, 0);
      }
      public bottomshow2() {
         if (get_int(right) == 0)
            run_program(PROGRAM:"bottomshow_default");
         else
            run_program(PROGRAM:"bottomshow_right");
         set_int(visible, 1);
         set_int(on_dismiss, 0);
      }
   }
   parts {
      part { name: "elm.swallow.offset"; type: SWALLOW;
         description { state: "default" 0.0;
            fixed: 1 1;
            align: 0.0 0.0;
            rel2.relative: 0.0 0.0;
         }
      }
      part { name: "elm.swallow.size"; type: SWALLOW;
         description { state: "default" 0.0;
            fixed: 1 1;
            align: 0.0 0.0;
            rel.to: "elm.swallow.offset";
            rel1.relative: 1.0 1.0;
         }
      }
      part { name: "base"; type: RECT;
         description { state: "default" 0.0;
            color: 0 0 0 0; // no cc
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
         }
      }
      part { name: "shad"; nomouse;
         scale: 1;
         description { state: "default" 0.0;
            rel.to: "button_image";
            WIN_SHADOW_ANGLE_SMALL("shad_angle_t.png");
            color_class: "/bg/normal/hoversel";
         }
         description { state: "bottom" 0.0;
            rel.to: "button_image";
            WIN_SHADOW_ANGLE_SMALL("shad_angle_b.png");
            color_class: "/bg/normal/hoversel";
         }
      }
      part { name: "button_image"; type: RECT;
         scale: 1;
         description { state: "default" 0.0;
            rel1.to_x: "limit0";
            rel2.to_x: "limit1";
            rel1.to_y: "elm.swallow.slot.top";
            rel2.to_y: "elm.swallow.slot.middle";
            rel2.relative: 1.0 0.0;
            color_class: "/bg/normal/hoversel/menu";
            offscale;
            rel1.offset: -5 -4;
            rel2.offset: 9 1;
         }
         description { state: "bottom" 0.0;
            inherit: "default"  0.0;
            rel1.to_y: "elm.swallow.slot.middle";
            rel1.relative: 0.0 1.0;
            rel2.to_y: "elm.swallow.slot.bottom";
            rel2.relative: 1.0 1.0;
            rel1.offset: -5 -2;
            rel2.offset: 9 3;
         }
      }
      part { name: "limit0"; type: SPACER;
         scale: 1;
         description { state: "default" 0.0;
            rel1.to_x: "elm.swallow.slot.top";
            rel1.offset: 1 0;
            rel2.to_x: "elm.swallow.slot.middle";
            rel2.offset: 0 0;
            rel2.relative: 0.0 1.0;
            align: 0.0 0.5;
            min: 1 1;
            max: 1 99999;
            offscale;
         }
         description { state: "bottom" 0.0;
            inherit: "default" 0.0;
            rel1.to_x: "elm.swallow.slot.bottom";
         }
      }
      part { name: "limit1"; type: SPACER;
         scale: 1;
         description { state: "default" 0.0;
            rel1.to_x: "elm.swallow.slot.middle";
            rel1.offset: -1 0;
            rel1.relative: 1.0 0.0;
            rel2.to_x: "elm.swallow.slot.top";
            rel2.offset: -2 0;
            align: 1.0 0.5;
            min: 1 1;
            max: 1 99999;
            offscale;
         }
         description { state: "bottom" 0.0;
            inherit: "default" 0.0;
            rel2.to_x: "elm.swallow.slot.bottom";
         }
      }
      part { name: "select_line"; type: RECT; mouse_events: 0;
         scale: 1;
         description { state: "default" 0.0;
            fixed: 1 1;
            align: 1.0 0.5;
            min: 5 0;
            rel.to: "button_image";
            rel1.relative: 1.0 0.0;
            color_class: "/bg/selected/hoversel/menu/bar";
         }
      }
      part { name: "topclip"; type: RECT;
         description { state: "default" 0.0;
            rel2.to_y: "button_image";
         }
      }
      part { name: "elm.swallow.slot.top"; type: SWALLOW;
         clip_to: "topclip";
         scale: 1;
         description { state: "default" 0.0;
            visible: 1;
            align: 0.0 0.0;
            fixed: 0 1;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 0.0 0.0;
            rel1.offset: 6 -4;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 1.0 0.0;
            /* set negative offset along x axis not to make
               "select_line" part exceed parent's width */
            rel2.offset: -12 3;
            offscale;
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            align: 0.0 1.0;
         }
         description { state: "right" 0.0;
            inherit: "default" 0.0;
            align: 1.0 0.0;
         }
         description { state: "right_visible" 0.0;
            inherit: "default" 0.0;
            align: 1.0 1.0;
         }
      }
      part { name: "bottomclip"; type: RECT;
         description { state: "default" 0.0;
            rel1.to_y: "button_image";
         }
      }
      part { name: "elm.swallow.slot.bottom"; type: SWALLOW;
         clip_to: "bottomclip";
         scale: 1;
         description { state: "default" 0.0;
            align: 0.0 1.0;
            fixed: 0 1;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 0.0 1.0;
            rel1.offset: 6 -2;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 1.0 1.0;
            /* set negative offset along x axis not to make
               "select_line" part exceed parent's width */
            rel2.offset: -12 -5;
            offscale;
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            align: 0.0 0.0;
         }
         description { state: "right" 0.0;
            inherit: "default" 0.0;
            align: 1.0 1.0;
         }
         description { state: "right_visible" 0.0;
            inherit: "default" 0.0;
            align: 1.0 0.0;
         }
      }
      part { name: "elm.swallow.slot.middle"; type: SWALLOW;
         description { state: "default" 0.0;
            rel.to: "elm.swallow.size";
         }
      }
   }
   programs {
      program { name: "end";
         signal: "mouse,up,*"; source: "base";
         script {
            if (get_int(on_dismiss) == 0) {
               emit("elm,action,dismiss", "elm");
               set_int(on_dismiss, 1);
            }
         }
      }
      program { name: "show";
         signal: "elm,action,show"; source: "elm";
         action: STATE_SET "visible" 0.0;
         target: "base";
      }
      program { name: "hide";
         signal: "elm,action,hide"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.3;
         target: "base";
         after: "hidefinished";
      }
      program { name: "hide_no_animate";
         signal: "elm,action,hide,no_animate"; source: "elm";
         action: STATE_SET "default" 0.0;
         target: "base";
         after: "hidefinished";
      }
      program { name: "hidefinished";
         script {
            set_int(on_dismiss, 0);
            emit("elm,action,hide,finished", "elm");
         }
      }
      program { name: "topshow";
         signal: "elm,action,slot,top,show"; source: "elm";
         script {
            set_state(PART:"limit0", "default", 0.0);
            set_state(PART:"limit1", "default", 0.0);
            set_state(PART:"button_image", "default", 0.0);
            set_state(PART:"shad", "default", 0.0);
            topshow2();
         }
      }
      program { name: "topshow_default";
         action: STATE_SET "visible" 0.0;
         target: "elm.swallow.slot.top";
         transition: DECELERATE 0.2;
      }
      program { name: "topshow_right";
         action: STATE_SET "right_visible" 0.0;
         target: "elm.swallow.slot.top";
         transition: DECELERATE 0.2;
      }
      program { name: "tophide";
         signal: "elm,action,slot,top,hide";
         source: "elm";
         script {
            if (get_int(right) == 0)
               run_program(PROGRAM:"tophide_default");
            else
               run_program(PROGRAM:"tophide_right");
            set_int(visible, 0);
         }
      }
      program { name: "tophide_default";
         action: STATE_SET "default" 0.0;
         target: "elm.swallow.slot.top";
         transition: DECELERATE 0.2;
      }
      program { name: "tophide_right";
         action: STATE_SET "right" 0.0;
         target: "elm.swallow.slot.top";
         transition: DECELERATE 0.2;
      }
      program { name: "bottomshow";
         signal: "elm,action,slot,bottom,show"; source: "elm";
         script {
            set_state(PART:"limit0", "bottom", 0.0);
            set_state(PART:"limit1", "bottom", 0.0);
            set_state(PART:"button_image", "bottom", 0.0);
            set_state(PART:"shad", "bottom", 0.0);
            bottomshow2();
         }
      }
      program { name: "bottomshow_default";
         action: STATE_SET "visible" 0.0;
         target: "elm.swallow.slot.bottom";
         transition: DECELERATE 0.2;
      }
      program { name: "bottomshow_right";
         action: STATE_SET "right_visible" 0.0;
         target: "elm.swallow.slot.bottom";
         transition: DECELERATE 0.2;
      }
      program { name: "bottomhide";
         signal: "elm,action,slot,bottom,hide"; source: "elm";
         script {
            if (get_int(right) == 0) {
               run_program(PROGRAM:"bottomhide_default");
            }
            else {
               run_program(PROGRAM:"bottomhide_right");
            }
            set_int(visible, 0);
         }
      }
      program { name: "bottomhide_default";
         action: STATE_SET "default" 0.0;
         target: "elm.swallow.slot.bottom";
         transition: DECELERATE 0.2;
      }
      program { name: "bottomhide_right";
         action: STATE_SET "right" 0.0;
         target: "elm.swallow.slot.bottom";
         transition: DECELERATE 0.2;
      }
      program { name: "align_right";
         signal: "elm,state,align,right"; source: "elm";
         script {
            set_int(right, 1);
            if (get_int(visible) == 0) {
               set_state(PART:"elm.swallow.slot.top", "right", 0.0);
               set_state(PART:"elm.swallow.slot.bottom", "right", 0.0);
            }
            else {
               set_state(PART:"elm.swallow.slot.top", "right_visible", 0.0);
               set_state(PART:"elm.swallow.slot.bottom", "right_visible", 0.0);
            }
         }
      }
      program { name: "align_default";
         signal: "elm,state,align,default"; source: "elm";
         script {
            set_int(right, 0);
            if (get_int(visible) == 0) {
               set_state(PART:"elm.swallow.slot.top", "default", 0.0);
               set_state(PART:"elm.swallow.slot.bottom", "default", 0.0);
            }
            else {
               set_state(PART:"elm.swallow.slot.top", "visible", 0.0);
               set_state(PART:"elm.swallow.slot.bottom", "visible", 0.0);
            }
         }
      }
   }
}

group { name: "elm/hover/base/hoversel_horizontal/default";
   alias: "elm/hover/base/hoversel_horizontal/entry";
   data.item: "dismiss" "on";
   images.image: "shad_angle_l.png" COMP;
   images.image: "shad_angle_r.png" COMP;
   script {
      public on_dismiss = 0;
   }
   // max_size limits the maximum size of expanded hoversel
   // when it's scrollable.
   //data.item: "max_size" "120";
   parts {
      part { name: "elm.swallow.offset"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 0.0 0.0;
            fixed: 1 1;
            rel1.relative: 0.0 0.0;
            rel2.relative: 0.0 0.0;
         }
      }
      part { name: "elm.swallow.size"; type: SWALLOW;
         description { state: "default" 0.0;
            align: 0.0 0.0;
            fixed: 1 1;
            rel.to: "elm.swallow.offset";
            rel1.relative: 1.0 1.0;
            rel2.relative: 1.0 1.0;
         }
      }
      part { name: "base"; type: RECT;
         description { state: "default" 0.0;
            color: 0 0 0 0; // no cc
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
         }
      }
      part { name: "shad"; nomouse;
         scale: 1;
         description { state: "default" 0.0;
            rel.to: "button_image";
            WIN_SHADOW_ANGLE_SMALL("shad_angle_l.png");
            color_class: "/shadow/normal/hoversel";
         }
         description { state: "right" 0.0;
            rel.to: "button_image";
            WIN_SHADOW_ANGLE_SMALL("shad_angle_r.png");
            color_class: "/shadow/normal/hoversel";
         }
      }
      part { name: "button_image"; type: RECT; nomouse;
         description { state: "default" 0.0;
            rel1.to_x: "elm.swallow.slot.left";
            rel1.to_y: "elm.swallow.slot.left";
            rel2.to_x: "elm.swallow.slot.middle";
            rel2.to_y: "elm.swallow.slot.left";
            rel2.relative: 0.0 1.0;
            rel1.offset: -4 0;
            rel2.offset: 1 -1;
            color_class: "/bg/normal/hoversel";
         }
         description { state: "right" 0.0;
            inherit: "default"  0.0;
            rel1.to_x: "elm.swallow.slot.middle";
            rel1.to_y: "elm.swallow.slot.right";
            rel2.to_x: "elm.swallow.slot.right";
            rel2.to_y: "elm.swallow.slot.right";
            rel1.relative: 1.0 0.0;
            rel2.relative: 1.0 1.0;
            rel1.offset: -2 0;
            rel2.offset: 3 -1;
         }
      }

      part { name: "leftclip"; type: RECT;
         description { state: "default" 0.0;
            rel2.to_x: "elm.swallow.slot.middle";
            rel2.relative: 0.0 1.0;
         }
      }
      part { name: "elm.swallow.slot.left"; type: SWALLOW;
         clip_to: "leftclip";
         description { state: "default" 0.0;
            align: 0.0 0.0;
            fixed: 1 0;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 0.0 0.0;
            rel1.offset: -1 2;
            rel2.to: "elm.swallow.slot.middle";
            rel2.relative: 0.0 1.0;
            rel2.offset: -1 -3;
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            align: 1.0 0.0;
         }
      }
      part { name: "rightclip"; type: RECT;
         description { state: "default" 0.0;
            rel1.to_x: "elm.swallow.slot.middle";
            rel1.relative: 1.0 0.0;
         }
      }
      part { name: "elm.swallow.slot.right"; type: SWALLOW;
         clip_to: "rightclip";
         description { state: "default" 0.0;
            align: 1.0 0.0;
            fixed: 1 0;
            rel1.to: "elm.swallow.slot.middle";
            rel1.relative: 1.0 0.0;
            rel1.offset: -2 2;
            rel2.to: "elm.swallow.slot.middle";
            rel2.offset: -1 -3;
         }
         description { state: "visible" 0.0;
            inherit: "default" 0.0;
            align: 0.0 0.0;
         }
      }
      part { name: "elm.swallow.slot.middle"; type: SWALLOW;
         description { state: "default" 0.0;
            rel.to: "elm.swallow.size";
         }
      }
   }
   programs {
      program { name: "end";
         signal: "mouse,up,*"; source: "base";
         script {
            if (get_int(on_dismiss) == 0) {
               emit("elm,action,dismiss", "elm");
               set_int(on_dismiss, 1);
            }
         }
      }
      program { name: "show";
         signal: "elm,action,show"; source: "elm";
         action: STATE_SET "visible" 0.0;
         transition: DECELERATE 0.2;
         target: "base";
      }
      program { name: "hide";
         signal: "elm,action,hide"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.2;
         target: "base";
         after: "hidefinished";
      }
      program { name: "hidefinished";
         script {
            set_int(on_dismiss, 0);
            emit("elm,action,hide,finished", "elm");
         }
      }

      program { name: "leftshow";
         signal: "elm,action,slot,left,show"; source: "elm";
         action: STATE_SET "visible" 0.0;
         transition: DECELERATE 0.2;
         target: "elm.swallow.slot.left";
      }
      program { name: "leftshow3";
         signal: "elm,action,slot,left,show"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.2;
         target: "button_image";
         target: "shad";
      }
      program { name: "lefthide";
         signal: "elm,action,slot,left,hide"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.2;
         target: "elm.swallow.slot.left";
      }

      program { name: "rightshow";
         signal: "elm,action,slot,right,show"; source: "elm";
         action: STATE_SET "visible" 0.0;
         transition: DECELERATE 0.2;
         target: "elm.swallow.slot.right";
      }
      program { name: "rightshow3";
         signal: "elm,action,slot,right,show"; source: "elm";
         action: STATE_SET "right" 0.0;
         transition: DECELERATE 0.2;
         target: "button_image";
         target: "shad";
      }
      program { name: "righthide";
         signal: "elm,action,slot,right,hide"; source: "elm";
         action: STATE_SET "default" 0.0;
         transition: DECELERATE 0.2;
         target: "elm.swallow.slot.right";
      }
   }
}
